2025年业务跟进表：

```html
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>业务员目标管理系统</title>
    <style>
        body {
            font-family: 'Arial', sans-serif;
            margin: 20px;
            background-color: #f5f7fa;
        }

        .container {
            max-width: 1400px;
            margin: 0 auto;
            padding: 25px;
            background: white;
            border-radius: 15px;
            box-shadow: 0 0 20px rgba(0,0,0,0.1);
        }

        h2 {
            color: #2c3e50;
            text-align: center;
            margin-bottom: 30px;
        }

        table {
            width: 100%;
            border-collapse: collapse;
            margin-top: 20px;
        }

        th {
            background-color: #3498db;
            color: white;
            padding: 15px;
            text-align: left;
        }

        td {
            padding: 12px;
            border-bottom: 1px solid #ecf0f1;
        }

        tr:nth-child(even) {
            background-color: #f8f9fa;
        }

        input, textarea {
            width: 95%;
            padding: 8px;
            border: 1px solid #bdc3c7;
            border-radius: 4px;
            font-size: 14px;
        }

        textarea {
            height: 60px;
            resize: vertical;
        }

        .progress-container {
            width: 100%;
            background-color: #e0e0e0;
            border-radius: 5px;
            overflow: hidden;
            height: 20px;
            margin: 5px 0;
        }

        .progress-bar {
            height: 100%;
            background-color: #2ecc71;
            text-align: center;
            color: white;
            font-size: 12px;
            line-height: 20px;
            transition: width 0.3s ease;
        }

        .button-group {
            margin-top: 20px;
            text-align: center;
        }

        button {
            padding: 10px 25px;
            margin: 0 5px;
            border: none;
            border-radius: 5px;
            cursor: pointer;
            transition: 0.3s;
        }

        .save-btn {
            background-color: #27ae60;
            color: white;
        }

        .delete-btn {
            background-color: #e74c3c;
            color: white;
        }

        .clear-btn {
            background-color: #f39c12;
            color: white;
        }

        .print-btn {
            background-color: #3498db;
            color: white;
        }

        button:hover {
            opacity: 0.9;
            transform: translateY(-1px);
        }

        .bonus-info {
            margin: 20px 0;
            padding: 15px;
            background-color: #ecf0f1;
            border-radius: 5px;
        }

        .bonus-info span {
            font-weight: bold;
            color: #e67e22;
        }
    </style>
</head>
<body>
    <div class="container">
        <h2>业务员目标管理系统</h2>
        <div class="bonus-info">
            奖金池总额：<span>40万元</span> | 年度总目标：<span>400单</span>
        </div>
        <table>
            <thead>
                <tr>
                    <th>经理人</th>
                    <th>年进度</th>
                    <th>月统计</th>
                    <th>本月目标</th>
                    <th>已完成单数</th>
                    <th>完成进度</th>
                    <th>预计奖金</th>
                    <th>操作</th>
                </tr>
            </thead>
            <tbody id="salesTable">
                <!-- 生成8个业务员的行 -->
                <script>
                    const totalBonus = 400000;
                    const totalTarget = 400;

                    for(let i=1; i<=8; i++){
                        document.write(`
                            <tr id="salesperson${i}">
                                <td><input type="text" id="name${i}" placeholder="姓名"></td>
                                <td><input type="number" id="year${i}" readonly></td>
                                <td><textarea id="month${i}"></textarea></td>
                                <td><textarea id="week${i}"></textarea></td>
                                <td><input type="number" id="completed${i}" min="0" oninput="updateProgress(${i})"></td>
                                <td>
                                    <div class="progress-container">
                                        <div id="progress${i}" class="progress-bar" style="width: 0%">0%</div>
                                    </div>
                                </td>
                                <td id="bonus${i}">0元</td>
                                <td>
                                    <button onclick="saveData(${i})" class="save-btn">保存</button>
                                    <button onclick="deleteData(${i})" class="delete-btn">删除</button>
                                </td>
                            </tr>
                        `);
                    }
                </script>
            </tbody>
        </table>

        <div class="button-group">
            <button onclick="clearAll()" class="clear-btn">清空所有数据</button>
            <button onclick="window.print()" class="print-btn">打印表格</button>
        </div>
    </div>

    <script>
        // 加载保存的数据
        window.onload = function() {
            for(let i=1; i<=8; i++){
                if(localStorage.getItem(`salesperson${i}`)){
                    let data = JSON.parse(localStorage.getItem(`salesperson${i}`));
                    document.getElementById(`name${i}`).value = data.name;
                    document.getElementById(`year${i}`).value = data.completed || 0;
                    document.getElementById(`month${i}`).value = data.month;
                    document.getElementById(`week${i}`).value = data.week;
                    document.getElementById(`completed${i}`).value = data.completed || 0;
                    updateProgress(i);
                }
            }
        }

        function saveData(index) {
            const data = {
                name: document.getElementById(`name${index}`).value,
                year: document.getElementById(`year${index}`).value,
                month: document.getElementById(`month${index}`).value,
                week: document.getElementById(`week${index}`).value,
                completed: document.getElementById(`completed${index}`).value || 0
            };
            localStorage.setItem(`salesperson${index}`, JSON.stringify(data));
            alert('数据已保存！');
        }

        function deleteData(index) {
            localStorage.removeItem(`salesperson${index}`);
            document.getElementById(`name${index}`).value = '';
            document.getElementById(`year${index}`).value = '';
            document.getElementById(`month${index}`).value = '';
            document.getElementById(`week${index}`).value = '';
            document.getElementById(`completed${index}`).value = '';
            updateProgress(index);
            alert('数据已删除！');
        }

        function clearAll() {
            localStorage.clear();
            location.reload();
        }

        function updateProgress(index) {
            const completed = parseFloat(document.getElementById(`completed${index}`).value) || 0;
            const progress = (completed / totalTarget * 100).toFixed(2);
            const bonus = (completed / totalTarget * totalBonus).toFixed(2);

            // 更新年目标列的值
            document.getElementById(`year${index}`).value = completed;

            document.getElementById(`progress${index}`).style.width = `${progress}%`;
            document.getElementById(`progress${index}`).innerText = `${progress}%`;
            document.getElementById(`bonus${index}`).innerText = `${bonus}元`;
        }
    </script>
</body>
</html>
```

主要更新内容：

1. 年目标列修改：
- 将年目标列从textarea改为只读的input
- 年目标的值自动等于已完成单数的值
- 年目标列不可手动编辑，只能通过修改已完成单数来更新

2. 数据绑定：
- 当用户输入或修改已完成单数时，年目标列的值会自动更新
- 保存数据时，年目标的值会与已完成单数的值保持一致

3. 数据加载：
- 加载保存的数据时，年目标列的值会设置为已完成单数的值

4. 其他优化：
- 年目标列的输入框设置为只读，防止用户手动修改
- 更新了数据保存逻辑，确保年目标的值与已完成单数的值一致

使用说明：
1. 在"已完成单数"列输入每个业务员完成的单数
2. "年目标"列的值会自动更新为与"已完成单数"相同的值
3. 系统会自动计算完成百分比并显示在进度条中
4. 预计奖金会根据完成比例自动计算并显示
5. 点击保存按钮保存当前业务员的数据
6. 支持打印功能，可打印当前表格内容
